/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;

import Controladores.CtrlUsuarios;
import Persistencia.DAOS.DAOUsuario;
import DataTypes.DataEvento;
import DataTypes.DataGrupo;
import DataTypes.DataUsuario;
import Hndlr.HndlrGrupo;
import Hndlr.HndlrUsuario;
import Interfaces.ICtrlModifUmbral;
import Interfaces.ICtrlUsuarios;
import Persistencia.DAOS.DAOContenidos;
import Persistencia.DAOS.DAOGrupos;
import Persistencia.DAOS.DAOMuros;
import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author Usuario
 */
public class CtrlPersistencia implements ICtrlPersistir{

    public CtrlPersistencia() {
    
    }

    @Override
    public void guardarUsuarios(ArrayList<DataUsuario> listU,String pathDirect) {
   
        DAOUsuario daoU = new DAOUsuario();
        daoU.guardarUsuarios(listU,pathDirect);

    }

    @Override
    public void guardaAmistad(ArrayList<DataUsuario> listU,String pathDirect)  throws IOException {

        DAOUsuario daoU = new DAOUsuario();
        daoU.guardarAmistad(listU,pathDirect);
       
    }
    
    @Override
    public void guardarEventos(ArrayList<DataUsuario> listU,String pathDirect){
       
        DAOContenidos daoC = new DAOContenidos();
        daoC.guardarEventos(listU,pathDirect);
        
    }
    
    @Override
    public void guardarContenidos(String path){
        
        ICtrlUsuarios usu = new CtrlUsuarios();
        
        DAOContenidos daoC = new DAOContenidos();
        daoC.guardarContenidosUsuarios(usu.listarDUsuarios(),path);
//        daoC.guardarContenidosGrupos();
        
        
        
    }
        
    @Override
        public void guardarUsuarioEvento(String path){
        try {
            String ruta = (path+"\\EventosAsoc.csv");
            CsvWriter writer = new CsvWriter(ruta);
            writer.write("Usuario");
            writer.write("Evento");
            
            ArrayList<DataGrupo> listG = HndlrGrupo.getInstance().listarGrupos();
            Iterator<DataGrupo> itListG = listG.iterator();
            
            HndlrUsuario hu = HndlrUsuario.getInstance();
            ArrayList<DataUsuario> listU = hu.listarDUsuarios();
            Iterator<DataUsuario> itListU = listU.iterator();
            HashMap<String, DataEvento> calEventos;
            Iterator<DataEvento> itEven;
            DataUsuario du;
            DataGrupo dg;
            DataEvento de;
            while(itListU.hasNext())
            {
                du = itListU.next();
                calEventos = du.getCalEventos();
                itEven = calEventos.values().iterator();
                
                while(itEven.hasNext()){
                    
                    writer.endRecord();
                    de = itEven.next();
                    
                    writer.write(du.getCorreo());
                    writer.write(de.getNombre());
                }
                
            }
            
             while(itListG.hasNext())
            {
                dg = itListG.next();
                calEventos = dg.getCalEventos();
                itEven = calEventos.values().iterator();
                
                while(itEven.hasNext()){
                    
                    writer.endRecord();
                    de = itEven.next();
                    
                    writer.write(dg.getNombre());
                    writer.write(de.getNombre());
                    
                }
                
            }
            
            writer.close();
            
        } catch (IOException ex) {
            Logger.getLogger(CtrlPersistencia.class.getName()).log(Level.SEVERE, null, ex);
        }
            
        }
    
    @Override
    public void guardarEntradasMuro(String path){
        
        DAOMuros mur = new DAOMuros();
        mur.guardarEntradasMuroUsuarios(path);
//        mur.guardarEntradasMuroGrupos();
        
    }

    @Override
    public void CargarUsuarios(String path) {

        DAOUsuario daoU = new DAOUsuario();
        ArrayList<DataUsuario> cargarUsuarios = daoU.cargarUsuarios(path);
        ICtrlUsuarios u = new CtrlUsuarios();
        DataUsuario du;
        Iterator<DataUsuario> it = cargarUsuarios.iterator();
        while (it.hasNext()) {
            try {
                u.altaUsuario(it.next());
            } catch (IOException ex) {
                Logger.getLogger(CtrlPersistencia.class.getName()).log(Level.SEVERE, null, ex);
            }

        }


    }
    
    @Override
    public void CargarAmistades(String path){
        
        DAOUsuario daoU = new DAOUsuario();
        daoU.cargarAmistades(path);
        
    }
    
    @Override
    public void CargarEntradasAMuro(String path){
        
        DAOMuros daoC = new DAOMuros();
        daoC.CargarEntradasMuro(path);
        
    }
    
    @Override
    public void cargarEventos(String path){
        
        DAOUsuario daoU = new DAOUsuario();
        daoU.cargarEventosUsuario(path);
        
    }
    
    @Override
    public void guardarGrupos(String path){
        
        DAOGrupos daoG = new DAOGrupos();
        daoG.guardarGrupos(path);
        
    }
    
    @Override
    public void cargarGrupos(String path){
        
        DAOGrupos daoG = new DAOGrupos();
        daoG.cargarGrupos(path);
    }
    
    @Override
    public void guardarUmbralMinimo(String path){
        
        ICtrlModifUmbral mod = Interfaces.Factory.getInstance().getModificarUmbral();
     
        try {
            String ruta = (path+"\\umbralMinimo.csv");
               CsvWriter writer = new CsvWriter(ruta);
               writer.write("umbral");
               writer.endRecord();
               String umbral  = String.valueOf(mod.getUmbral());
               writer.write(umbral);
               writer.close();
               
        } catch (IOException ex) {
            Logger.getLogger(CtrlPersistencia.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    @Override
    public void cargarUmbralMinimo(String path){
        
        ICtrlModifUmbral mod = Interfaces.Factory.getInstance().getModificarUmbral();
        String ruta = path+"\\umbralMinimo.csv";
        try {
        
             CsvReader amistad = new CsvReader(new InputStreamReader(new FileInputStream(ruta), "UTF-8"));
            amistad.readHeaders();
            while(amistad.readRecord()){
                
                String umb = amistad.get("umbral");
                int umbral = Integer.parseInt(umb);
                mod.modificarUmbral(umbral);
            }
            amistad.close();
        } catch (IOException ex) {
            Logger.getLogger(CtrlPersistencia.class.getName()).log(Level.SEVERE, null, ex);
        
        }
    }

    @Override
    public void cargarEtiquetas(String PathCarpeta) {
        DAOContenidos daoC = new DAOContenidos();
        daoC.cargarEtiquetas(PathCarpeta);
    }
    @Override
    public void cargarHistoriales(String path){
        
        DAOUsuario usu = new DAOUsuario();
        usu.cargarHistorial(path);
    }
    @Override
public void guardarHistorial(String path){
        
        DAOUsuario usu = new DAOUsuario();
        usu.guardarHistorial(path);
    }    
    
}